package com.gxa.learning.core.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.log4j.Log4j2;

/**
 * 这是一个对象于字符串互相转化的实体类
 *
 * @author YXQ
 * @date 2021/11/29 16:37
 */
@Log4j2
public class JsonUtil {
    private static ObjectMapper objectMapper = null;

    static {
        objectMapper = new ObjectMapper();
    }

    /**
     * 把对象转化成json字符串
     *
     * @param object 对象
     * @return 返回字符串
     */
    public static String objectToString(Object object) {
        String jsonString = null;
        try {
            jsonString = objectMapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            log.info("----------------begin----------------");
            log.info(e);
            // 再遍历栈中的异常轨迹
            StackTraceElement[] stackTrace = e.getStackTrace();
            // 遍历异常轨迹
            for (StackTraceElement stackTraceElement : stackTrace) {
                // 写入日志文件
                log.info(stackTraceElement);
            }
            log.info("----------------end----------------");

        }
        return jsonString;
    }

    /**
     * 把jsonString转化为目标对象的方法
     *
     * @param jsonString json字符串
     * @param tClass     目标对象的Class类型
     * @param <T>        泛型
     * @return 擦除后的泛型对象
     */
    public static <T> T stringToObject(String jsonString, Class<T> tClass) {
        T t = null;
        try {
            t = objectMapper.readValue(jsonString, tClass);
        } catch (JsonProcessingException e) {
            log.info("----------------begin----------------");
            log.info(e);
            // 再遍历栈中的异常轨迹
            StackTraceElement[] stackTrace = e.getStackTrace();
            // 遍历异常轨迹
            for (StackTraceElement stackTraceElement : stackTrace) {
                // 写入日志文件
                log.info(stackTraceElement);
            }
            log.info("----------------end----------------");
        }
        return t;
    }
}
